package com.edu.chapter07;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.widget.Button;

/**
 * Handler 发送消息 → MessageQueue 存储 → Looper 分发 → Handler 处理
 */
public class VerificationCodeActivity extends AppCompatActivity {
    private Button btnGetCode;
    private int countdownSeconds = 60; // 倒计时总时长
    // 创建绑定到主线程的Handler：
    // Looper.getMainLooper()：确保所有操作在主线程执行
    // 用于安全更新UI组件
    private final Handler handler = new Handler(Looper.getMainLooper());

    //声明倒计时任务（Runnable对象），保存倒计时逻辑
    private Runnable countdownRunnable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_verification_code);
        btnGetCode = findViewById(R.id.btn_get_code);

        btnGetCode.setOnClickListener(v -> startCountdown());
    }

    // 启动倒计时
    private void startCountdown() {
        btnGetCode.setEnabled(false); // 禁用按钮防止重复点击
        // 创建倒计时任务（匿名内部类）并判断是否在有效倒计时内
        countdownRunnable = new Runnable() {

            @SuppressLint("SetTextI18n")
            @Override
            public void run() {
                if (countdownSeconds > 0) {
                    btnGetCode.setText("重新发送(" + countdownSeconds + "s)");
                    countdownSeconds--;
                    //  通过Handler实现延时：每秒（1000ms）执行一次当前任务
                    handler.postDelayed(this, 1000); // 每秒更新一次
                } else {
                    // 倒计时结束调用重置方法
                    resetButton(); // 倒计时结束
                }
            }
        };
        handler.post(countdownRunnable); // 立即启动
    }

    // 重置按钮状态
    private void resetButton() {
        // 移除所有未完成的倒计时任务（避免资源浪费）
        handler.removeCallbacks(countdownRunnable); // 移除回调
        btnGetCode.setEnabled(true);
        btnGetCode.setText("获取验证码");
        countdownSeconds = 60; // 重置倒计时
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 移除Handler所有回调
        //  防止Activity销毁后Handler持有引用导致内存泄漏
        handler.removeCallbacksAndMessages(null); // 避免内存泄漏
    }
}